Lisp Objects

A Lisp object is fixed-size data structure that is organized in a way mandated by the VM implementation. The fixed format allows the VM to determine the type of the object. <Virtual type? VM type? Implementation type? ...provides the VM enough information about the type of the object for the VM to implement the VM-level semantics... ...supports the "dynamic types"...>

Lisp objects are stored in locations known as cells.

Has major types: immediate and non-immediate. Non-immediate objects may have a subtype. Non-immediate types: symbol (nil may be weird) cons ratio complex some float types g-vector i-vector string bit-vector environment (always has subtype) array header bignum structure pc (code vector) stack closure (control stack pointer)

Non-immediate objects are allocated in "type spaces". The type space of an object is characterized by a small integer known as the type code. Any two objects of one of the above boxed types will always have the same type code. But not really... Some types might be allocated in different type spaces at different times. (?)

The type code doesn't totally describe the object. In general, subtype information may be involved.

Immediate types: character fixnum unbound trap short float